package ucla.axelia.modelo.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import ucla.axelia.modelo.data.DataGenerica;
import ucla.axelia.modelo.data.ReconocimientoVoluntario;

public class ServicioReconocimientoVoluntarioDAO extends ServicioGenericoDAO {

	public ServicioReconocimientoVoluntarioDAO() {
		super(ReconocimientoVoluntario.class);
	}

	public ReconocimientoVoluntario buscarPorClave(Serializable clave) {
		// Buscar por la clave primaria en la tabla
		DataGenerica data = super.buscarPorClave(clave);
		return (data != null)? (ReconocimientoVoluntario)data: null;
	}

	public List buscarPorEjemplo(ReconocimientoVoluntario reconocimientoVoluntario, String estado) {
		// Buscar todos los datos que se asemejan al objeto (parecido a un LIKE)
		return super.buscarPorEjemplo(reconocimientoVoluntario, estado);
	}

	public List buscarPorEjemplo(ReconocimientoVoluntario reconocimientoVoluntario, String estado, int primero, int cantidad) {
		return super.buscarPorEjemplo(reconocimientoVoluntario, estado, primero, cantidad);
	}

	public List buscarPorEjemplo(ReconocimientoVoluntario reconocimientoVoluntario, String estado, List orden) {
		return super.buscarPorEjemplo(reconocimientoVoluntario, estado, orden);
	}

	public List buscarPorEjemplo(ReconocimientoVoluntario reconocimientoVoluntario, String estado, int primero, int cantidad, List orden) {
		return super.buscarPorEjemplo(reconocimientoVoluntario, estado, primero, cantidad, orden);
	}

	public void eliminarFisicamente(ReconocimientoVoluntario reconocimientoVoluntario) {
		super.eliminarFisicamente(reconocimientoVoluntario);
	}

	public void eliminarLogicamente(ReconocimientoVoluntario reconocimientoVoluntario, boolean eliminacionCascada) {
		// Hacer en eliminacion en cascada pasando TRUE
		super.eliminarLogicamente(reconocimientoVoluntario, eliminacionCascada);
	}

	public void guardar(ReconocimientoVoluntario reconocimientoVoluntario) {
		Session session=super.getSession();
		String sentencia = "delete from ReconocimientoVoluntario reconocimientoVoluntario where " +
				"reconocimientoVoluntario.reconocimiento.idReconocimiento = :reconocimiento " +
				"and reconocimientoVoluntario.voluntario.idVoluntario = :voluntario " +
				"and reconocimientoVoluntario.annoEntrega = :anno";
		Query query = session.createQuery(sentencia);
		query.setInteger("reconocimiento", reconocimientoVoluntario.getReconocimiento().getIdReconocimiento());
		query.setInteger("voluntario", reconocimientoVoluntario.getVoluntario().getIdVoluntario());
		query.setInteger("anno", reconocimientoVoluntario.getAnnoEntrega());
		query.executeUpdate();
		super.guardar(reconocimientoVoluntario);
	}

	public void restaurar(ReconocimientoVoluntario tipoActividad, boolean restauracionCascada) {
		// Activar un objeto eliminado logicamente
		super.restaurar(tipoActividad, restauracionCascada);
	}
}
